package model

import (
	"github.com/jinzhu/gorm"
	_const "go-admin/internal/model/const"
)

// 岗位
type Job struct {
	CommonModel
	IsBanned string `json:"isBanned"` // 是否禁用
	Remark   string `json:"remark"`   // 备注信息
	JobName  string `json:"jobName"`  // 岗位名称
	JobCode  string `json:"jobCode"`  // 岗位编码
}

// 重置表名
func (j *Job) TableName() string {
	return "sys_job"
}

// 获取总数
func (j *Job) Count(db *gorm.DB) (int, error) {
	var count int
	if j.IsBanned != "" {
		db = db.Where("is_banned = ?", j.IsBanned)
	}
	if j.JobName != "" {
		db = db.Where("job_name LIKE ?", "%"+j.JobName+"%")
	}
	if err := db.Model(&j).Where("is_del = ?", _const.ISDEL).Count(&count).Error; err != nil {
		return 0, err
	}
	return count, nil
}

// 创建
func (j *Job) Create(db *gorm.DB) (string, error) {
	return j.Id, db.Create(&j).Error
}

// 获取列表
func (j *Job) List(db *gorm.DB, pageOffset, pageSize int) ([]*Job, error) {
	var jobs []*Job
	var err error
	db = db.Offset(pageOffset).Limit(pageSize)
	if j.IsBanned != "" {
		db = db.Where("is_banned = ?", j.IsBanned)
	}
	if j.JobName != "" {
		db = db.Where("job_name LIKE ?", "%"+j.JobName+"%")
	}
	if err = db.Where("is_del = ?", _const.ISDEL).Find(&jobs).Error; err != nil {
		return nil, err
	}
	return jobs, nil
}

// 更新
func (j *Job) Update(db *gorm.DB, values interface{}) error {
	if err := db.Model(&j).Updates(values).Where("id = ?", j.Id).Error; err != nil {
		return err
	}
	return nil
}


// 批量软删除
func (j *Job) Deletes(db *gorm.DB, ids []string, values interface{}) error {
	return db.Model(&j).Where("id IN (?)", ids).Updates(values).Error

}

// 获取列表
func (j *Job) ListAll(db *gorm.DB) ([]*Job, error) {
	var jobs []*Job
	var err error
	if err = db.Where("is_del = ?", _const.ISDEL).Where("is_banned = ?", _const.ISBANNED).Find(&jobs).Error; err != nil {
		return nil, err
	}
	return jobs, nil
}

// 根据岗位名称获取岗位信息
func (j *Job) GetJobByJobNameAndJobCode(db *gorm.DB, jobName, jobCode string) (*Job, error) {
	var job Job
	if err := db.Where("is_del = ?", _const.ISDEL).Where("job_name = ?", jobName).Or("job_code = ?", jobCode).First(&job).Error; err != nil {
		// 判断错误
		switch {
		case err == gorm.ErrRecordNotFound:
			// 说明没有找到
			return &job, nil
		case err != nil:
			return &job, err
		}
	}
	return &job, nil
}

// 根据id获取详情
func (j *Job) GetJobById(db *gorm.DB) (*Job, error) {
	var job Job
	if err := db.Where("id = ?", j.Id).First(&job).Error; err != nil {
		// 判断错误
		switch {
		case err == gorm.ErrRecordNotFound:
			// 说明没有找到
			return &job, nil
		case err != nil:
			return &job, err
		}
	}
	return &job, nil
}
